package ventanas;

import gestores.SistemaUsuarios;

import java.awt.CardLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.text.DecimalFormat;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import clasesBasicas.Global;

import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;

public class PanelNorte extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = -7085631361013139476L;
	
	private JTextField textUsuario;
	private JPasswordField passwordField;
	private VentanaRegistro ventRegistro;
	private JButton btnSalir;
	private JButton btnPreferencias;
	private static final JPanel PanelNorteLogin = new JPanel();
	private static final JPanel PanelNorteLogeado = new JPanel();
	private JLabel lblEstasLogueado;
	public static JLabel lblInfoCuenta;
	/**
	 * Create the panel.
	 */
	public PanelNorte() {
		Global.sU = new SistemaUsuarios();
		
		setPreferredSize(new Dimension(70, 45));
		final CardLayout cardsPN = new CardLayout(0,0);
		setLayout(cardsPN);
		PanelNorteLogin.setPreferredSize(new Dimension(100, 100));

	
		PanelNorteLogin.setMinimumSize(new Dimension(100, 100));
		PanelNorteLogeado.setPreferredSize(new Dimension(50, 70));

		
		PanelNorteLogeado.setMinimumSize(new Dimension(50,50));

		add(PanelNorteLogin, "pnortelogin");
		add(PanelNorteLogeado,"pnortelogueado");

		PanelNorteLogin.setLayout(new FormLayout(new ColumnSpec[] {
				ColumnSpec.decode("48px"),
				ColumnSpec.decode("73px"),
				ColumnSpec.decode("117px"),
				ColumnSpec.decode("83px"),
				ColumnSpec.decode("114px"),
				FormFactory.RELATED_GAP_COLSPEC,
				FormFactory.DEFAULT_COLSPEC,
				FormFactory.RELATED_GAP_COLSPEC,
				FormFactory.DEFAULT_COLSPEC,
				FormFactory.RELATED_GAP_COLSPEC,
				FormFactory.DEFAULT_COLSPEC,},
				new RowSpec[] {
				RowSpec.decode("max(22dlu;pref)"),}));

		//Componentes para PanelNorteLogin
		JLabel lblUsuario = new JLabel("Usuario:");
		lblUsuario.setMinimumSize(new Dimension(20, 16));
		lblUsuario.setMaximumSize(new Dimension(20, 16));
		
		textUsuario = new JTextField();
		textUsuario.setMaximumSize(new Dimension(4, 20));
		textUsuario.setColumns(10);

		JLabel lblContrasea = new JLabel("Contrase\u00F1a:");
		passwordField = new JPasswordField();

		JButton btnRegistrarse = new JButton("Registrarse");
		final JLabel MensajeError = new JLabel("");

		final JButton btnLogin = new JButton("Login");


		PanelNorteLogin.add(textUsuario, "3, 1, left, fill");
		PanelNorteLogin.add(lblContrasea, "4, 1, left, fill");
		PanelNorteLogin.add(passwordField, "5, 1, fill, fill");
		PanelNorteLogin.add(lblUsuario, "2, 1, left, fill");
		PanelNorteLogin.add(btnRegistrarse, "9, 1");
		PanelNorteLogin.add(MensajeError, "11, 1");
		PanelNorteLogin.add(btnLogin, "7, 1");

	
	

		//Nuevo frame para registrarse ,configurar bien el cierre
		btnRegistrarse.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				ventRegistro = new VentanaRegistro();
				ventRegistro.setVisible(true);
				ventRegistro.setAlwaysOnTop(true);
			}
		});

		
		btnPreferencias = new JButton("Preferencias");
		btnPreferencias.setEnabled(false);
		
		
		btnPreferencias.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Global.pPref= new PanelPreferencias();
				ventanas.ElFrame.anadirPPref();
//				PanelCentral.add(Global.pPref);
				Global.pLista.setVisible(false);
				Global.pEmp.setVisible(false);
				Global.pNot.setVisible(false);
				Global.pPref.setVisible(true);
				if(Global.pFav != null){
					Global.pFav.setVisible(false);
					Global.pFav.removeAll();
				}
					
				if(Global.pRan != null){
					Global.pRan.setVisible(false);
					Global.pRan.removeAll();
					Global.pRan.apagarCancion();
				}
				
				if(Global.pAdministrar != null){
					Global.pAdministrar.setVisible(false);
					Global.pAdministrar.removeAll();
				}
				if(Global.pMovimientos != null){
					Global.pMovimientos.setVisible(false);
					Global.pMovimientos.removeAll();
				}
			}
		});
		btnPreferencias.setBounds(825, 2, 120, 30);
//		PanelNorteLogeado.add(btnPreferencias);
		
		btnSalir = new JButton("Salir");
		
		

		
		btnSalir.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				salirUsuario();
				lblEstasLogueado.setText("");
				lblInfoCuenta.setText("");
				
			}
		});
		btnSalir.setBounds(675, 2, 120, 30);
//		PanelNorteLogeado.add(btnSalir);

		btnLogin.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				PanelNorteLogeado.setLayout(null);
				String pass="";
				char charpass[]=passwordField.getPassword();
				int existe = 0;
				for(int i=0;i<charpass.length;i++)
				{
					pass+=charpass[i];
				}
				try {
					existe = Global.sU.existeUsuario(textUsuario.getText(), pass);
					if(existe==1)
					{
						JOptionPane.showMessageDialog(null, "Se ha logeado correctamente con la cuenta de "+Global.sU.usuarioActual.getId_usuario(), "Sesión iniciada", JOptionPane.INFORMATION_MESSAGE);
						lblEstasLogueado = new JLabel("Bienvenido " + Global.sU.usuarioActual.getId_usuario());
						lblInfoCuenta = new JLabel("Dinero: " + Global.sU.usuarioActual.getDineroActual()+"     Nivel de Juego: "+Global.sU.usuarioActual.getNivelActual());
						lblEstasLogueado.setBounds(86, 10, 150, 22);
						PanelNorteLogeado.add(lblEstasLogueado);
						lblInfoCuenta.setBounds(250, 10, 250, 22);
						PanelNorteLogeado.add(lblInfoCuenta);
						PanelNorteLogeado.add(btnSalir);
						PanelNorteLogeado.add(btnPreferencias);


						add(PanelNorteLogeado);

						textUsuario.setText("");
						passwordField.setText("");
						//	
						btnPreferencias.setEnabled(true);
						btnSalir.setEnabled(true);
						Global.btnRanking.setEnabled(true);						
						Global.btnAyuda.setEnabled(true);
						Global.btnFavoritos.setVisible(true);
						Global.btnFavoritos.setEnabled(true);
						Global.btnMisMovimientos.setEnabled(true);
						Global.pEmp.btnComprar.setEnabled(true);
						Global.pEmp.btnFijoVender.setEnabled(true);
						
						
						if(Global.sU.usuarioActual.getAdmin()=='y')
						{
							Global.btnAdministrar.setEnabled(true);
						}
						Global.pEmp.actualizarMaximos();
						Global.sU.actualizarFavorito();
						Global.sisEmp.actualizarMisMovimientos();
						
						if(Global.pEmp.isVisible())
						{
							boolean fav=Global.sU.usuarioActual.getFavorito(Global.cod_Emp_Sel);
							if(fav)
							{
								Global.btnFavorito.setIcon(new ImageIcon("imagenesBasicas/estrellaRellena.png"));
							}
						}
						
						Global.btnFavorito.setVisible(true);
						
						//Favoritos
						

					}
					else
					{
						if(existe==0)
						{
							JOptionPane.showMessageDialog(null, "El usuario no existe. Compruebe que se ha introducido correctamente.", "Usuario incorrecto", JOptionPane.ERROR_MESSAGE);

						}
						else
						{
							JOptionPane.showMessageDialog(null, "La contraseña no corresponde con el usuario. Compruebe que se ha introducido correctamente. Si el problema persiste, contacte con el administrador.", "Contrase��a incorrecta", JOptionPane.WARNING_MESSAGE);
						}

					}

				} catch (SQLException e1) {
//					System.out.println("error login");
				}
				if (existe==1)
				{
					cardsPN.next(Global.pNorte);;


				}
				else
				{
//					System.out.println("error login");
					MensajeError.setText("Error login");
					PanelNorteLogin.repaint();
				}
			}
		});
	}
	public void salirUsuario(){
		Global.sU.usuarioActual = null;
		this.lblEstasLogueado.setText("");
		this.lblInfoCuenta.setText("");
		PanelNorteLogeado.setVisible(false);
		PanelNorteLogin.setVisible(true);
		Global.pLista.setVisible(true);
		Global.pEmp.setVisible(false);
		Global.pNot.setVisible(false);
		Global.btnAyuda.setEnabled(false);
		Global.btnFavoritos.setEnabled(false);
		Global.btnAdministrar.setEnabled(false);
		Global.btnRanking.setEnabled(false);
		Global.pEmp.btnComprar.setEnabled(false);
		Global.pEmp.btnFijoVender.setEnabled(false);
		Global.btnMisMovimientos.setEnabled(false);
		
		Global.btnFavorito.setVisible(false);
		Global.btnFavoritos.setVisible(false);
		Global.btnFavoritos.setEnabled(false);
		if(Global.pFav != null){
			Global.pFav.setVisible(false);
			Global.pFav.removeAll();
		}
			
		if(Global.pRan != null){
			Global.pRan.setVisible(false);
			Global.pRan.removeAll();	
			Global.pRan.apagarCancion();
		}
		
		if(Global.pAdministrar != null){
			Global.pAdministrar.setVisible(false);
			Global.pAdministrar.removeAll();
		}
		if(Global.pMovimientos != null){
			Global.pMovimientos.setVisible(false);
			Global.pMovimientos.removeAll();
		}
		if(Global.pPref != null){
			Global.pPref.setVisible(false);
			Global.pPref.removeAll();
		}
		
	}
	
	public void actualizarNorteLogueado()
	{
		DecimalFormat decf = new DecimalFormat("###.###");
		lblInfoCuenta.setText("Dinero: " + decf.format(Global.sU.usuarioActual.getDineroActual())+"     Nivel de Juego: "+Global.sU.usuarioActual.getNivelActual());
		
	}

}
